package com.guo.dms.common.menu.utils;

import java.util.ArrayList;
import java.util.List;

import com.guo.dms.common.menu.dao.MenuDao;
import com.guo.dms.common.menu.entity.Menu;
import com.guo.dms.common.tree.entity.TreeNode;
import com.guo.dms.common.tree.util.TreeUtils;
import com.guo.dms.common.utils.SpringContextHolder;
import com.guo.dms.dept.user.utils.UserUtils;

/**
 * menu静态工具
 * @author Administrator
 *
 */
public class MenuUtils {
	private static MenuDao menuDao=SpringContextHolder.getBean(MenuDao.class);
	 
	/**
	 * 根据rootId以该id为根节点  获取该id以下的节点并组合为MenuNode
	 * @param rootId
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public  static TreeNode<Menu> getMneuTree(Integer rootId){
		List<Menu> allmenus = menuDao.selectAllMenus();
		Menu rootMenu = menuDao.selectByPrimaryKey(rootId);//根据该id获取
		//递归组合所有menu为树结构
			return    (TreeNode<Menu>) TreeUtils.getNodeTree(allmenus,rootMenu);
		 
	}
	
	public static TreeNode<Menu> getCurrentUserMenuTree(Integer rootId){
		List<Menu> allmenus = UserUtils.getCurrentUserMenus();
		Menu rootMenu = menuDao.selectByPrimaryKey(rootId);//根据该id获取
		//递归组合所有menu为树结构
		return getMenuTree(allmenus,new TreeNode<Menu>(rootMenu));
	}
	
	
	/**
	 * menulist的值加载到rootnode树节点中，
	 * @param menus  所有menu队列
	 * @param rootNode 当前结点
	 * @return
	 */
	public static TreeNode<Menu> getMenuTree(List<Menu> menus,TreeNode<Menu> rootNode){
		Integer parentId = rootNode.getNode().getId();
		//找到下层所有元素
		List<TreeNode<Menu>> childs=new ArrayList<>();
		for (Menu menu : menus) {
			if(menu.getParentId().equals(parentId)){
				//递归进行下级元素添加
				childs.add(getMenuTree(menus, new TreeNode<Menu>(menu)));
			}
		}
		rootNode.setChilds(childs);;
		return rootNode;
	}
	
	
	public static void printMenuNode(TreeNode<Menu> node,String pre){
		 System.err.println(pre+""+node.getNode().getName()+","+node.getNode().getId());
		 if(node.getChilds()!=null || node.getChilds().size()>0){
			 for (TreeNode<Menu> menuNode : node.getChilds()) {
				 printMenuNode(menuNode,pre+pre);
			}
		 }
	}

}
